package com.example.parent.bookmanage_jpa.entity;

import jakarta.persistence.*;

/**
 * 图书实体类
 * 与数据库中的book表进行映射，用于封装图书的基本信息
 */
@Entity // 标识该类为JPA实体类，对应数据库中的一张表
@Table(name = "book") // 指定实体类对应的数据库表名，此处对应book表
public class Book {
    /**
     * 图书唯一标识ID
     * 作为主键，采用自增策略生成
     */
    @Id // 标识该字段为主键
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 主键生成策略为自增（依赖数据库支持）
    private Integer id;

    /**
     * 图书名称
     * 映射到数据库表中的name字段
     */
    @Column(name = "name") // 指定该字段对应数据库表中的name列
    private String name;

    /**
     * 图书作者
     * 映射到数据库表中的author字段（字段名与属性名一致）
     */
    private String author;

    /**
     * 出版社名称
     * 映射到数据库表中的publisher字段
     */
    private String publisher;

    /**
     * 图书状态
     * 可能的取值：如"可借阅"、"已借出"、"已下架"等
     * 映射到数据库表中的status字段
     */
    private String status;

    /**
     * 无参构造方法
     * JPA要求实体类必须提供无参构造方法，用于对象实例化
     */
    public Book() {
    }

    /**
     * 全参构造方法
     * 用于创建包含所有属性的Book对象
     *
     * @param id        图书ID
     * @param name      图书名称
     * @param author    图书作者
     * @param publisher 出版社
     * @param status    图书状态
     */
    public Book(Integer id, String name, String author, String publisher, String status) {
        this.id = id;
        this.name = name;
        this.author = author;
        this.publisher = publisher;
        this.status = status;
    }

    /**
     * 重写toString方法
     * 用于对象的字符串表示，方便日志输出和调试
     *
     * @return 包含图书所有属性的字符串
     */
    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", publisher='" + publisher + '\'' +
                ", status='" + status + '\'' +
                '}';
    }

    // 以下为各属性的getter和setter方法

    /**
     * 获取图书ID
     *
     * @return 图书ID
     */
    public Integer getId() {
        return id;
    }

    /**
     * 设置图书ID
     *
     * @param id 图书ID
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * 获取图书名称
     *
     * @return 图书名称
     */
    public String getName() {
        return name;
    }

    /**
     * 设置图书名称
     *
     * @param name 图书名称
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取图书作者
     *
     * @return 图书作者
     */
    public String getAuthor() {
        return author;
    }

    /**
     * 设置图书作者
     *
     * @param author 图书作者
     */
    public void setAuthor(String author) {
        this.author = author;
    }

    /**
     * 获取出版社名称
     *
     * @return 出版社名称
     */
    public String getPublisher() {
        return publisher;
    }

    /**
     * 设置出版社名称
     *
     * @param publisher 出版社名称
     */
    public void setPublisher(String publisher) {
        this.publisher = publisher;
    }

    /**
     * 获取图书状态
     *
     * @return 图书状态
     */
    public String getStatus() {
        return status;
    }

    /**
     * 设置图书状态
     *
     * @param status 图书状态
     */
    public void setStatus(String status) {
        this.status = status;
    }
}